package xyz.cerberu.cet.user.service;

import xyz.cerberu.cet.global.domain.CommentShow;
import xyz.cerberu.cet.global.domain.Global;
import xyz.cerberu.cet.global.utils.StringUtils;
import xyz.cerberu.cet.user.dao.CommentDao;
import xyz.cerberu.cet.user.domain.Comment;
import xyz.cerberu.cet.user.exception.CommentException;
import org.apache.commons.lang3.StringEscapeUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.sql.Timestamp;
import java.util.List;

/**
 * @author β世界
 * Created on 9:18
 * @Description 评论的服务实现
 */
@Service
public class CommentServiceImpl {
    private final CommentDao commentDao;
    private final Global global;

    @Autowired
    public CommentServiceImpl(CommentDao commentDao, Global global) {
        this.commentDao = commentDao;
        this.global = global;
    }

    /**
     * @author β世界 on 10:51 2020/9/18
     * 获取一个动漫的所有评论，并且做到分级
     * 1.superior为空的时候，这个评论为顶级
     * 2.我们从最后一个评论(时间顺序倒序),根据他的superior属性，找到他的上级
     *   然后将他存储于他的子回复列表里。
     * @param ani_id: 动漫id
     * @param page: 页数
     * @return java.util.List<com.Cet.user.domain.Comment>
     **/
    public List<Comment> getAnimeComment(String ani_id, int page) {
        // 根据页数来获取评论
        return commentDao.findAnimeComment(ani_id);
    }

    /**
     * @author β世界 on 9:32 2020/9/18
     * 添加一个评论到数据库中
     * 1.我们需要对评论中的一些emjoy进行进行URL编码
     * @param comment: 评论实体
     * @return void
     **/
    public void addComment(Comment comment) {
        // 判断长度是否正确
        if(comment.getCommentContent().length() > 255){
            throw new CommentException("评论内容过长");
        }
        // 检查是否存在上级回复
        if(comment.getSuperior() != null){
            if(commentDao.findCommentByCid(comment.getSuperior()) == null){
                throw new CommentException("回复评论不存在");
            }
        }
        // 处理所有的url，进行高亮处理
        comment.setCommentContent(StringUtils.highLightURL(comment.getCommentContent()));
        // 将emjoy进行url编码
        comment.setCommentContent(StringUtils.encodeEnjoy(comment.getCommentContent()));
        // 进行实体编码
        comment.setCommentContent(StringEscapeUtils.escapeHtml4(comment.getCommentContent()));
        // 添加时间
        comment.setDate(new Timestamp(System.currentTimeMillis()));
        commentDao.addComment(comment);
    }

    /**
     * @author β世界 on 10:47 2020/9/18
     * 删除一个评论(将显示改为不显示)
     * @param cid: 评论id
     * @param commentShow: 显示状态
     * @return boolean
     **/
    public boolean removeComment(int cid , CommentShow commentShow) {
        int line = commentDao.isShowComment(cid,commentShow.getIsShow());
        if(line == 1){
            return true;
        }
        return false;
    }

    /**
     * @author β世界 on 22:57 2020/9/20
     * 查询一个动漫的评论总数
     * @param ani_id: 动漫id
     * @return int
     **/
    public int getAnimeCommentSum(String ani_id) {
        return commentDao.findAnimeCommentSum(ani_id);
    }
}
